package myjava.statico;

public class Root2 {

   public static void main(String[] args) {

      // i membri possono essere raggiunti via istanza
      // e il reference type comanda!!!
      
      Foo o1 = new Foo();
      Foo o2 = new Faa();

      /* QUI COMANDA IL COMPILE TIME!! (la vera natura dell'oggetto non conta)
         quindi NO POLIMORFISMO! Nel caso dei metodi di istanza i metodi overridati vengono
         eseguiti nella versione overridata anche quando l'oggetto e definito come istanza
         della super classe (le proprieta' no invece!)

         QUI INVECE NO! COMPILE TIME RULES

         */
      System.out.println(o1.s1);
      o1.doIt();
      
      System.out.println(o2.s1);
      o2.doIt();
   }
}

class Foo {

   public static String s1 = "I am Foo";
   
   public static void doIt() {
      System.out.println("doIt in Foo");
   }
}

class Faa extends Foo {

   public static String s1 = "I am Faa";

   public static void doIt() {
      System.out.println("doIt in Faa");
   }
}